package com.example.flashsales.service;

import com.example.flashsales.entity.dto.*;
import com.example.flashsales.entity.pojo.Goods;
import com.example.flashsales.entity.pojo.OrderDetails;
import com.example.flashsales.entity.pojo.Store;
import com.example.flashsales.entity.vo.*;
import com.github.pagehelper.PageInfo;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface AdminService {

    //添加商品
    boolean addGoods(GoodsDto goods);
    //删除商品
    String deleteGoods(long goodsId);

    //修改商品信息
    boolean updateGoodsMessage(GoodsDto goodsDto);

    //查看所有商品，去商品表查看（这个查看只是初步查看有哪些商品）
    List<GoodsVo> viewAllGoods(int num,int page);

    //按类别查看商品（直接去商品表里面查询）
    List<GoodsVo> viewGoodsByType(GoodsDto goodsDto,int num,int page);

    //按商品名称查看商品（模糊查询，可输入一个字找到与之有关的集合，直接去商品表里面查询）
    List<GoodsVo> viewGoodsByName(String name,int num,int page);

    //查看商品的具体信息
    GoodsVo viewGoodsMessage(long id);

    // 打印当天的所有订单(去时间表里面查看时间)
    List<OrdersVo>viewOrderByDay(Integer num,Integer page);

    //打印当天订单各种商品的总重量
    List<GoodsVo> viewWeightByAllGoods();

    //打印流水（可按天，也可按月）
    List<AdminCostRecordVo> viewCostRecord(Date qTime, int page, int num,Date hTime);

    //打印所有流水
    List<AdminCostRecordVo> viewAllCostRecord(int page,int num);

    //根据用户的电话号码查询订单（电话号码加时间）
    List<OrdersVo> viewOrdersByUserPhoneAndTime(String phone,Date qDate,Date hDate,int page,int num);

    //置每个店家拉一个人挣得金额
    boolean updateStoreUserMoney(long storeId,double money);

    //设置每个店家成交一单的金额
    boolean updateStoreOrderMoney(long storeId,double money);

    //查看所有店家信息
    PageInfo<Store> viewStore(int page, int num);

    //按类型查看店家
    List<StoreVo> viewStoreByState(int state);

    //查看某个店家的拉人情况
    List<UserVo> viewStoreUser(long storeId);



    //修改某个订单中某个商品的分拣状态
    boolean updateOrderDetailsState(long detailsId,int adminId,long stockId,Double count);


    //增加一条进货纪录
    boolean addStockRecord(StockDto stockDto, List<StockDetailsDto> stockDetailsDtos);


    //查看进货纪录（全部）
    List<StockVo> viewAllStock(int num,int page,Date qDate,Date hDate);


    //TODO 与用户的交流

    //看店家的信息
    StoreVo viewStoreMessage(long storeId);

    //修改店家状态
    boolean updateStoreState(long storeId,int state);

    //查看店家的所有订单情况（分页）
    List<OrdersVo> viewAllOrderByStore(long storeId,int page,int num);

    //按时间查看店家订单
    List<OrdersVo> viewOrdersByTime(long storeId, int page, int num, Date qDate, Date hDate);

    //发起退货申请（分拣人员多退少补）
    boolean addReturnRecord(RefundDto refundDto, List<RefundDetailsDto> refundDetailsDtoList);

    //店家的注册
    String registerStore(StoreDto storeDto);

    //TODO 分拣

    //确认打包完成
    boolean updateOrderState(long orderId,int state);

    //查看某条的退款
    ReturnOrderVo viewRefundDetails(long refundId);

    //查看所有的退款
    List<ReturnOrderVo> viewAllRefund(int page,int num);

    //按类型查看退款
    List<ReturnOrderVo> viewRefundByState(int state,int page,int num);

    //修改退货订单细节状态
    boolean updateRefundDetailsState(int state,long detailsId,int adminId);

//    // 修改退货订单状态
//    String updateRefundState(int state,long refundId,int adminId);

    //增加类型
    boolean addType(String name);

    //修改每天订单截止的配置时间
    boolean updateTimeConfig(Date date);

    //登录
    AdminVo login(String password,String account);


    //根据重量查看订单细节
    List<OrderDetails> viewOrderDetailsVo(double count, long goodsId);


    //根据时间类型查看所有订单
    Map<String,Object> viewAllOrderByTimeAndState(int page,int num,Date qDate,Date hDate,int state);

    //查看所有用户
    Map<String, Object> viewAllUser(Integer page, Integer num);

    //查看管理员信息
    AdminVo viewAdminMessage(int i);


}
